#include <iostream>
#include <string.h>
#include <cmath>
using namespace std;

int times[11];
double all_readtime[11];
int start_time[1010];
int end_time[1010];
int avg_readtime[11];

int to_minute(int hour, int minute)
{
    return hour * 60 + minute;
}

int main()
{
    //这是个人认为最大坑点，我之前一直初始化为0，但是实际上借书时间可以是在00：00
    //在这种情况下我49行的判断就不会成立（之前判断两者都不为0，但是借书时间在00：00时start_time就是0）
    memset(start_time, -1, sizeof(start_time));
    memset(end_time, -1, sizeof(end_time));
    int days, num = 0;
    cin >> days;
    int j = 0; // 第几天
    while (j != days)
    {
        // 一天的工作
        cin >> num;
        while (1)
        {
            int hour, minute;
            char movement;
            cin >> movement >> hour;
            cin.get();
            cin >> minute;
            if (num == 0)
            {
                break;
            }
            if (movement == 'S')
            {
                start_time[num] = to_minute(hour, minute);
            }
            else
            {
                //在还书的时候判断就可以保证借书时间一定是以最新的为准，还书时间一定是以最早为准
                end_time[num] = to_minute(hour, minute);
                if (start_time[num] != -1 && end_time[num] != -1)
                {
                    all_readtime[j] += (end_time[num] - start_time[num]);
                    times[j]++;
                    end_time[num] = -1;
                    start_time[num] = -1;
                }
            }
            cin >> num;
        }
        if (times[j])
        {
            avg_readtime[j] = round(all_readtime[j] / times[j]);
        }
        else
        {
            // 0次借阅要输出0 0
            avg_readtime[j] = 0;
        }
        // 把start_time 和 end_time 重新初始化
        memset(start_time, -1, sizeof(start_time));
        memset(end_time, -1, sizeof(end_time));
        j++;
    }
    for (int i = 0; i < days; i++)
    {
        cout << times[i] << " " << avg_readtime[i] << endl;
    }
    return 0;
}